package com.fiveflavors.suittar.property;

import java.awt.Font;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

/**
 * Suittar Property クラス。
 * Propertyへのアクセスは本クラス経由で行う。
 * @author marr
 * @author withgod
 */
public class SuittarProperty extends Properties {
	/**
	 * 
	 */
	private static final long serialVersionUID = 366279904071113711L;
	private String propPath = SuittarProperty.PROPERTY_FILE_DEFAULT;
	/**
	 * property file path.
	 * default "suittar20.xml"
	 */
	public static final String PROPERTY_FILE_DEFAULT = "suittar20.xml";
	/** property set時の基本パス名 */
	public static final String PROPERTY_KEY_BASE = "com.fiveflavors.suittar";
	/** ユーザ名 */
	public static final String PROPERTY_KEY_ID = PROPERTY_KEY_BASE + ".Id";
	/** Proxy使用の有無 */
	public static final String PROPERTY_KEY_USE_PROXY = PROPERTY_KEY_BASE + ".UseProxy";
	/** Proxyホスト */
	public static final String PROPERTY_KEY_PROXY_HOST = PROPERTY_KEY_BASE + ".ProxyHost";
	/** Proxyポート */
	public static final String PROPERTY_KEY_PROXY_PORT = PROPERTY_KEY_BASE + ".ProxyPort";
	/** 更新間隔 */
	public static final String PROPERTY_KEY_REFRESH_INTERVAL = PROPERTY_KEY_BASE + ".RefreshInterval";
	/** デフォルトの表示タブ */
	public static final String PROPERTY_KEY_DEFAULT_VIEW = PROPERTY_KEY_BASE + ".DefaultView";
	/** メッセージ入力欄でのEnterでのコメント送信の有無 */
	public static final String PROPERTY_KEY_ENTER_TO_UPDATE = PROPERTY_KEY_BASE + ".EnterToUpdate";
	/** 表示に使うフォント名 */
	public static final String PROPERTY_KEY_FONT_FAMILY = PROPERTY_KEY_BASE + ".FontFamily";
	/** 表示に使うフォントサイズ */
	public static final String PROPERTY_KEY_FONT_SIZE = PROPERTY_KEY_BASE + ".FontSize";
	/** Growl通知の有無 */
	public static final String PROPERTY_KEY_USE_GROWL = PROPERTY_KEY_BASE + ".UseGrowl";
	/** Twitter API URL */
	public static final String PROPERTY_KEY_BASE_URL = PROPERTY_KEY_BASE + ".BaseURL";
	/** Twitter API URLのデフォルト値 */
	public static final String TWITTER_DEFAULT_BASE_URL = "http://twitter.com/";
	
	public synchronized void saveProperties() throws IOException {
		FileOutputStream fos =  new FileOutputStream(propPath);
		this.storeToXML(fos , "Suittar - Twitter Client on Java Properties","UTF-8");
		fos.close();
	}
	
	public synchronized void loadProperties() throws IOException {
		File file = new File(propPath);
		if (file.exists() && file.canRead()) {
			this.loadFromXML(new FileInputStream(propPath));
		}
		setSuittarDefault(PROPERTY_KEY_BASE_URL, TWITTER_DEFAULT_BASE_URL);
		setSuittarDefault(PROPERTY_KEY_FONT_FAMILY, Font.DIALOG);
		setSuittarDefault(PROPERTY_KEY_FONT_SIZE, "12");
		setSuittarDefault(PROPERTY_KEY_USE_PROXY, "false");
		setSuittarDefault(PROPERTY_KEY_REFRESH_INTERVAL, "1");
	}

	private void setSuittarDefault(String key, String value) {
		if (!isValidData(key)) {
			this.setProperty(key, value);
		}
	}
	
	public boolean isValidData(String key) {
		String tmpVal = this.getProperty(key);
		if (tmpVal == null || tmpVal.length() <= 0) {
			return false;
		}
		return true;
	}
	
	public String getLooseString(String key) {
		if (isValidData(key)) {
			return this.getProperty(key);
		}
		return "";
	}
	public boolean getLooseBoolean(String key) {
		return Boolean.parseBoolean(this.getProperty(key));
	}
	public int getLooseInt(String key) {
		if (isValidData(key)) {
			try {
				return Integer.parseInt(this.getProperty(key));
			} catch (NumberFormatException e) {
				return 0;
			}
		}
		return 0;
	}

	public SuittarProperty(String propPath) {
		super();
		this.propPath = propPath;
	}
	public SuittarProperty() {
		super();
	}
}
